dma_map_single can't sleep since it may be called with locks held, or
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 10 Aug 2005 09:50:05 +0000 (09:50 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 10 Aug 2005 09:50:05 +0000 (09:50 +0000)
interrupts off, etc.   Thus it shouldn't make sleeping allocations.

Signed-off-by: Chris Wright <chrisw@osdl.org>
linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c

index dae139a0655266777147d745c181d6836b031602..249507484f25aa625a843134c31d7ec841255f7b 100644 (file)
@@ -182,8 +182,8 @@ dma_map_single(struct device *dev, void *ptr, size_t size,
        if ((((unsigned int)ptr & ~PAGE_MASK) + size) <= PAGE_SIZE) {
                dma = virt_to_bus(ptr);
        } else {
-               BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL);
-               BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL);
+               BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL);
+               BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL);
                if (direction != DMA_FROM_DEVICE)
                        memcpy(bnc, ptr, size);
                ent->dma    = dma;
index be30d893dab2882f58f40e99a1b4a49f596df781..96b2ee64bc35e643e44c9ebf319ded1aba993dfc 100644 (file)
@@ -234,8 +234,8 @@ dma_map_single(struct device *dev, void *ptr, size_t size,
        if (((((unsigned long)ptr) & ~PAGE_MASK) + size) <= PAGE_SIZE) {
                dma = virt_to_bus(ptr);
        } else {
-               BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL);
-               BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL);
+               BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL);
+               BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL);
                if (direction != DMA_FROM_DEVICE)
                        memcpy(bnc, ptr, size);
                ent->dma    = dma;